home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / 80x0992d.zip / CRC32.ASM < prev    next >
Assembly Source File  |  1992-09-30  |  5KB  |  117 lines

  1. IDEAL
  2. ;
  3. ; CRC32.ASM
  4. ; Placed by Kumanan Yogaratnam
  5. ;
  6. ; This CRC-32 routine and tables were converted from code discovered
  7. ; in the DEZIP.PAS V2.0 by R. P. Byrne.  The comments there are:
  8. ; Converted to Turbo Pascal (tm) V4.0 March, 1988 by J.R.Louvau
  9. ; COPYRIGHT (C) 1986 Gary S. Brown.  You may use this program, or
  10. ; code or tables extracted from it, as desired without restriction.
  11. ;
  12. ; The block CRC computation should start with high-values (0ffffffffh),
  13. ; and finish by inverting all bits.
  14. ;
  15. ; This TASM conversion done by:
  16. ;   Edwin T. Floyd [76067,747]  #9 Adams Park Ct.  Columbus, GA 31909
  17. ;   404-576-3305 (work)   404-322-0076 (home)
  18. ; Borland's Turbo Assembler - TASM is required to assemble this program.
  19.  
  20.          MODEL CTYPE, LANG
  21.          CODESEG
  22. crc32tab dd 000000000h, 077073096h, 0ee0e612ch, 0990951bah
  23.    dd 0076dc419h, 0706af48fh, 0e963a535h, 09e6495a3h
  24.    dd 00edb8832h, 079dcb8a4h, 0e0d5e91eh, 097d2d988h
  25.    dd 009b64c2bh, 07eb17cbdh, 0e7b82d07h, 090bf1d91h
  26.    dd 01db71064h, 06ab020f2h, 0f3b97148h, 084be41deh
  27.    dd 01adad47dh, 06ddde4ebh, 0f4d4b551h, 083d385c7h
  28.    dd 0136c9856h, 0646ba8c0h, 0fd62f97ah, 08a65c9ech
  29.    dd 014015c4fh, 063066cd9h, 0fa0f3d63h, 08d080df5h
  30.    dd 03b6e20c8h, 04c69105eh, 0d56041e4h, 0a2677172h
  31.    dd 03c03e4d1h, 04b04d447h, 0d20d85fdh, 0a50ab56bh
  32.    dd 035b5a8fah, 042b2986ch, 0dbbbc9d6h, 0acbcf940h
  33.    dd 032d86ce3h, 045df5c75h, 0dcd60dcfh, 0abd13d59h
  34.    dd 026d930ach, 051de003ah, 0c8d75180h, 0bfd06116h
  35.    dd 021b4f4b5h, 056b3c423h, 0cfba9599h, 0b8bda50fh
  36.    dd 02802b89eh, 05f058808h, 0c60cd9b2h, 0b10be924h
  37.    dd 02f6f7c87h, 058684c11h, 0c1611dabh, 0b6662d3dh
  38.    dd 076dc4190h, 001db7106h, 098d220bch, 0efd5102ah
  39.    dd 071b18589h, 006b6b51fh, 09fbfe4a5h, 0e8b8d433h
  40.    dd 07807c9a2h, 00f00f934h, 09609a88eh, 0e10e9818h
  41.    dd 07f6a0dbbh, 0086d3d2dh, 091646c97h, 0e6635c01h
  42.    dd 06b6b51f4h, 01c6c6162h, 0856530d8h, 0f262004eh
  43.    dd 06c0695edh, 01b01a57bh, 08208f4c1h, 0f50fc457h
  44.    dd 065b0d9c6h, 012b7e950h, 08bbeb8eah, 0fcb9887ch
  45.    dd 062dd1ddfh, 015da2d49h, 08cd37cf3h, 0fbd44c65h
  46.    dd 04db26158h, 03ab551ceh, 0a3bc0074h, 0d4bb30e2h
  47.    dd 04adfa541h, 03dd895d7h, 0a4d1c46dh, 0d3d6f4fbh
  48.    dd 04369e96ah, 0346ed9fch, 0ad678846h, 0da60b8d0h
  49.    dd 044042d73h, 033031de5h, 0aa0a4c5fh, 0dd0d7cc9h
  50.    dd 05005713ch, 0270241aah, 0be0b1010h, 0c90c2086h
  51.    dd 05768b525h, 0206f85b3h, 0b966d409h, 0ce61e49fh
  52.    dd 05edef90eh, 029d9c998h, 0b0d09822h, 0c7d7a8b4h
  53.    dd 059b33d17h, 02eb40d81h, 0b7bd5c3bh, 0c0ba6cadh
  54.    dd 0edb88320h, 09abfb3b6h, 003b6e20ch, 074b1d29ah
  55.    dd 0ead54739h, 09dd277afh, 004db2615h, 073dc1683h
  56.    dd 0e3630b12h, 094643b84h, 00d6d6a3eh, 07a6a5aa8h
  57.    dd 0e40ecf0bh, 09309ff9dh, 00a00ae27h, 07d079eb1h
  58.    dd 0f00f9344h, 08708a3d2h, 01e01f268h, 06906c2feh
  59.    dd 0f762575dh, 0806567cbh, 0196c3671h, 06e6b06e7h
  60.    dd 0fed41b76h, 089d32be0h, 010da7a5ah, 067dd4acch
  61.    dd 0f9b9df6fh, 08ebeeff9h, 017b7be43h, 060b08ed5h
  62.    dd 0d6d6a3e8h, 0a1d1937eh, 038d8c2c4h, 04fdff252h
  63.    dd 0d1bb67f1h, 0a6bc5767h, 03fb506ddh, 048b2364bh
  64.    dd 0d80d2bdah, 0af0a1b4ch, 036034af6h, 041047a60h
  65.    dd 0df60efc3h, 0a867df55h, 0316e8eefh, 04669be79h
  66.    dd 0cb61b38ch, 0bc66831ah, 0256fd2a0h, 05268e236h
  67.    dd 0cc0c7795h, 0bb0b4703h, 0220216b9h, 05505262fh
  68.    dd 0c5ba3bbeh, 0b2bd0b28h, 02bb45a92h, 05cb36a04h
  69.    dd 0c2d7ffa7h, 0b5d0cf31h, 02cd99e8bh, 05bdeae1dh
  70.    dd 09b64c2b0h, 0ec63f226h, 0756aa39ch, 0026d930ah
  71.    dd 09c0906a9h, 0eb0e363fh, 072076785h, 005005713h
  72.    dd 095bf4a82h, 0e2b87a14h, 07bb12baeh, 00cb61b38h
  73.    dd 092d28e9bh, 0e5d5be0dh, 07cdcefb7h, 00bdbdf21h
  74.    dd 086d3d2d4h, 0f1d4e242h, 068ddb3f8h, 01fda836eh
  75.    dd 081be16cdh, 0f6b9265bh, 06fb077e1h, 018b74777h
  76.    dd 088085ae6h, 0ff0f6a70h, 066063bcah, 011010b5ch
  77.    dd 08f659effh, 0f862ae69h, 0616bffd3h, 0166ccf45h
  78.    dd 0a00ae278h, 0d70dd2eeh, 04e048354h, 03903b3c2h
  79.    dd 0a7672661h, 0d06016f7h, 04969474dh, 03e6e77dbh
  80.    dd 0aed16a4ah, 0d9d65adch, 040df0b66h, 037d83bf0h
  81.    dd 0a9bcae53h, 0debb9ec5h, 047b2cf7fh, 030b5ffe9h
  82.    dd 0bdbdf21ch, 0cabac28ah, 053b39330h, 024b4a3a6h
  83.    dd 0bad03605h, 0cdd70693h, 054de5729h, 023d967bfh
  84.    dd 0b3667a2eh, 0c4614ab8h, 05d681b02h, 02a6f2b94h
  85.    dd 0b40bbe37h, 0c30c8ea1h, 05a05df1bh, 02d02ef8dh
  86.  
  87. PUBLIC   UpdateCRC32
  88. PROC     UpdateCRC32 uses ds si, initcrc:DWORD,inbuf:DWORD,inlen:WORD
  89. ; The updated CRC is returned in DX:AX.
  90. ; long UpdateCRC32 (long initCRC, void far *buf, unsigned inLen);
  91. ; Stomps registers: AX,BX,CX,DX,ES
  92.          lds    si,[inbuf]    ; ds:si := ^inbuf
  93.          les    ax,[initcrc]  ; dx:ax := initcrc
  94.          mov    dx,es
  95.          mov    cx,[inlen]    ; cx := inlen
  96.          or     cx,cx
  97.          jz     ##done
  98. #@loop:  xor    bh,bh
  99.          mov    bl,al
  100.          lodsb
  101.          xor    bl,al
  102.          mov    al,ah
  103.          mov    ah,dl
  104.          mov    dl,dh
  105.          xor    dh,dh
  106.          shl    bx,1
  107.          shl    bx,1
  108.          les    bx,[cs:crc32tab+bx]
  109.          xor    ax,bx
  110.          mov    bx,es
  111.          xor    dx,bx
  112.          loop   ##loop
  113. #@done:  ret
  114. ENDP
  115. END
  116.  
  117. ; EOF CRC32.ASM